/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.imp;

import dao.AirLineDAOException;
import dao.Conexao;
import dao.UsuarioDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import model.Usuario;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Carlos, Edward, Diego, Honorio
 */
public class UsuarioDAOImpl implements UsuarioDAO {

    /**
     * Variavel para armazenar o objeto de conexao, enviado pelo Conexao.getConnection()
     */
    private Connection conn;

    /**
     * Construtor
     * @throws AirLineDAOException
     */
    public UsuarioDAOImpl() throws AirLineDAOException {
        try {
            this.conn = Conexao.getConnection();
        } catch (Exception e) {
            throw new AirLineDAOException("Erro: " + ":\n" + e.getMessage());
        }
    }

    /**
     * Metodo chamado para executar query para atualizar usuario na tabela
     * Cliente do banco de dados
     * @param cliente
     * @throws AirLineDAOException
     */
    public Usuario atualizarUser(Usuario usuario) throws AirLineDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (usuario == null) {
            throw new AirLineDAOException("Nenhum usuario foi informado!");
        }
        try {
            String sql = "UPDATE usuario SET nome=?, "
                    + "telefone=?, cpf=?, email=?, "
                    + "login=?, senha=? WHERE id=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            //ps.setString(1, usuario.getId());
            ps.setString(1, usuario.getNome());
            ps.setString(2, usuario.getTelefone());
            ps.setString(3, usuario.getCpf());
            ps.setString(4, usuario.getEmail());
            ps.setString(5, usuario.getLogin());
             ps.setString(6, usuario.getSenha());
            ps.setString(7, usuario.getId());
            ps.executeUpdate();
            return usuario;
        } catch (SQLException e) {
            throw new AirLineDAOException("Erro ao atualizar usuario " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    /**
     * Metodo chamado para executar query para excluir usuario na tabela
     * Cliente do banco de dados
     * @param usuario
     * @throws AirLineDAOException
     */
    public void excluirUser(Usuario usuario) throws AirLineDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (usuario == null) {
            throw new AirLineDAOException("Nenhum usuario foi informado!");
        }
        try {
            String sql = "DELETE FROM usuario WHERE cpf=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, usuario.getCpf());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new AirLineDAOException("Erro ao excluir usuario " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }
    
    /**
     * Metodo chamado para executar query para inserir cliente na tabela
     * Cliente do banco de dados
     * @param usuario
     * @throws LivrariaDAOException
     */

    public void salvarUser(Usuario usuario) throws AirLineDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (usuario == null)
            throw new AirLineDAOException("Nenhum usuario foi informado!");
        try {
            String sql = "INSERT INTO usuario (id, nome, telefone, cpf, email, " +
                    "login,senha) " +
                    "values (?, ?, ?, ?, ?, ?, ?)";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, usuario.getId());
            ps.setString(2, usuario.getNome());
            ps.setString(3, usuario.getTelefone());
            ps.setString(4, usuario.getCpf());
            ps.setString(5, usuario.getEmail());
            ps.setString(6, usuario.getLogin());
            ps.setString(7, usuario.getSenha());
            ps.executeUpdate();
        } catch (SQLException e){
            throw new AirLineDAOException("Erro ao inserir usuario " + e);

        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    
    
    public Usuario procurarUser(String cpf) throws AirLineDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM usuario WHERE cpf=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, cpf);
            rs = ps.executeQuery();
            if( !rs.next()) {
                throw new AirLineDAOException("Nao foi encontrado nenhum registro com CPF " + cpf);
            }
            String id = rs.getString("id");
            String nome = rs.getString("nome");
            String telefone = rs.getString("telefone");
            String email = rs.getString("email");
            String login = rs.getString("login");
            String senha = rs.getString("senha");
            String cpf1 = rs.getString("cpf");
 
            Usuario usuario = new Usuario(id, nome, telefone,cpf1,email,
                          login, senha);
            return usuario;
        } catch (SQLException e){
            throw new AirLineDAOException("Erro ao procurar usuario " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    public Usuario procurarUser(String login, String senha) throws AirLineDAOException {
        PreparedStatement ps= null;
        Connection conn1= null;
        ResultSet rs= null;
        Usuario usuario1 = new Usuario();

        try{
            String sql= "SELECT * FROM usuario WHERE login=? AND senha=?";
            conn1= this.conn;

            ps = conn1.prepareStatement(sql);
            ps.setString(1, login);
            ps.setString(2, senha);
            rs= ps.executeQuery();

            while(rs.next()){
                String id= rs.getString("id");
                String nome= rs.getString("nome");
                String telefone= rs.getString("telefone");
                String cpf= rs.getString("cpf");
                String email= rs.getString("email");
                String login1= rs.getString("login");
                String senha1= rs.getString("senha");

                usuario1= new Usuario(id, nome, telefone, cpf, email, login1, senha1);
            }return usuario1;
            }catch (SQLException e){
                throw new AirLineDAOException ("Erro ao procurar Cliente" + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
        
        
        public String ultimoID() throws AirLineDAOException {
        PreparedStatement ps= null;
        Connection conn1= null;
        ResultSet rs= null;
        String id="";

        try{
            String sql= "select max(id) from usuario";
            conn1= this.conn;

            ps = conn1.prepareStatement(sql);
            rs= ps.executeQuery();

            while(rs.next()){
                id= rs.getString("max");
            }return id;
            }catch (SQLException e){
                throw new AirLineDAOException ("Erro ao procurar ID" + e);
        }finally{
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
}
